cssimage: Implement some equal functions
authorBenjamin Otte <otte@redhat.com>
Wed, 31 Oct 2012 23:22:39 +0000 (00:22 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 1 Nov 2012 11:27:31 +0000 (12:27 +0100)
gtk/gtkcssimagecrossfade.c
gtk/gtkcssimagelinear.c

index 2aa9f2953946b169ca7b37b582e61e96a829c0d3..1b02af94f73f5e8b6d1cd37f7587d38af3c12346 100644 (file)
@@ -86,6 +86,18 @@ gtk_css_image_cross_fade_get_height (GtkCssImage *image)
   return start_height + (end_height - start_height) * cross_fade->progress;
 }
 
+static gboolean
+gtk_css_image_cross_fade_equal (GtkCssImage *image1,
+                                GtkCssImage *image2)
+{
+  GtkCssImageCrossFade *cross_fade1 = GTK_CSS_IMAGE_CROSS_FADE (image1);
+  GtkCssImageCrossFade *cross_fade2 = GTK_CSS_IMAGE_CROSS_FADE (image2);
+
+  return cross_fade1->progress == cross_fade2->progress &&
+         _gtk_css_image_equal (cross_fade1->start, cross_fade2->start) &&
+         _gtk_css_image_equal (cross_fade1->end, cross_fade2->end);
+}
+
 static void
 gtk_css_image_cross_fade_draw (GtkCssImage        *image,
                                cairo_t            *cr,
@@ -234,6 +246,7 @@ _gtk_css_image_cross_fade_class_init (GtkCssImageCrossFadeClass *klass)
 
   image_class->get_width = gtk_css_image_cross_fade_get_width;
   image_class->get_height = gtk_css_image_cross_fade_get_height;
+  image_class->equal = gtk_css_image_cross_fade_equal;
   image_class->draw = gtk_css_image_cross_fade_draw;
   image_class->parse = gtk_css_image_cross_fade_parse;
   image_class->print = gtk_css_image_cross_fade_print;
index b09131d4233ea37c8579f74e73edc4a393934ba8..9f94e492333db566b20f811cb58433d680cdf29f 100644 (file)
@@ -533,6 +533,34 @@ fail:
   return GTK_CSS_IMAGE_CLASS (_gtk_css_image_linear_parent_class)->transition (start_image, end_image, property_id, progress);
 }
 
+static gboolean
+gtk_css_image_linear_equal (GtkCssImage *image1,
+                            GtkCssImage *image2)
+{
+  GtkCssImageLinear *linear1 = GTK_CSS_IMAGE_LINEAR (image1);
+  GtkCssImageLinear *linear2 = GTK_CSS_IMAGE_LINEAR (image2);
+  guint i;
+
+  if (linear1->repeating != linear2->repeating ||
+      !_gtk_css_value_equal (linear1->angle, linear2->angle) ||
+      linear1->stops->len != linear2->stops->len)
+    return FALSE;
+
+  for (i = 0; i < linear1->stops->len; i++)
+    {
+      GtkCssImageLinearColorStop *stop1, *stop2;
+
+      stop1 = &g_array_index (linear1->stops, GtkCssImageLinearColorStop, i);
+      stop2 = &g_array_index (linear2->stops, GtkCssImageLinearColorStop, i);
+
+      if (!_gtk_css_value_equal0 (stop1->offset, stop2->offset) ||
+          !_gtk_css_value_equal (stop1->color, stop2->color))
+        return FALSE;
+    }
+
+  return TRUE;
+}
+
 static void
 gtk_css_image_linear_dispose (GObject *object)
 {
@@ -563,6 +591,7 @@ _gtk_css_image_linear_class_init (GtkCssImageLinearClass *klass)
   image_class->parse = gtk_css_image_linear_parse;
   image_class->print = gtk_css_image_linear_print;
   image_class->compute = gtk_css_image_linear_compute;
+  image_class->equal = gtk_css_image_linear_equal;
   image_class->transition = gtk_css_image_linear_transition;
 
   object_class->dispose = gtk_css_image_linear_dispose;